From 044735992c3be9c0a48b87c1efdca98f363c7ae2 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Fri, 20 May 2005 10:29:43 +0000 Subject: [PATCH] bitkeeper revision 1.1482 (428dbc17RT9NQ-_ttXtXBKQgwnM38g) Ensure the static correspondence IRQ0<->FIRST_DEVICE_VECTOR is reflected in the vector_irq[] and irq_vector[] arrays. Signed-off-by: Keir Fraser --- xen/arch/x86/i8259.c | 4 ++-- xen/arch/x86/io_apic.c | 2 +- xen/arch/x86/vmx.c | 1 - xen/include/asm-x86/irq.h | 1 + 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/i8259.c b/xen/arch/x86/i8259.c index 8111260050..91bc24f5d9 100644 --- a/xen/arch/x86/i8259.c +++ b/xen/arch/x86/i8259.c @@ -391,18 +391,18 @@ void __init init_IRQ(void) set_intr_gate(FIRST_EXTERNAL_VECTOR+i, interrupt[i]); } -#ifdef CONFIG_SMP /* * IRQ0 must be given a fixed assignment and initialized, * because it's used before the IO-APIC is set up. */ + irq_vector[0] = FIRST_DEVICE_VECTOR; + vector_irq[FIRST_DEVICE_VECTOR] = 0; set_intr_gate(FIRST_DEVICE_VECTOR, interrupt[0]); /* Various IPI functions. */ set_intr_gate(EVENT_CHECK_VECTOR, event_check_interrupt); set_intr_gate(INVALIDATE_TLB_VECTOR, invalidate_interrupt); set_intr_gate(CALL_FUNCTION_VECTOR, call_function_interrupt); -#endif /* Self-generated IPI for local APIC timer. */ set_intr_gate(LOCAL_TIMER_VECTOR, apic_timer_interrupt); diff --git a/xen/arch/x86/io_apic.c b/xen/arch/x86/io_apic.c index bb69348b14..286313f6bb 100644 --- a/xen/arch/x86/io_apic.c +++ b/xen/arch/x86/io_apic.c @@ -1047,7 +1047,7 @@ static inline int IO_APIC_irq_trigger(int irq) } /* irq_vectors is indexed by the sum of all RTEs in all I/O APICs. */ -u8 irq_vector[NR_IRQ_VECTORS] = { FIRST_DEVICE_VECTOR , 0 }; +u8 irq_vector[NR_IRQ_VECTORS]; int assign_irq_vector(int irq) { diff --git a/xen/arch/x86/vmx.c b/xen/arch/x86/vmx.c index 78572a132b..6b296bb8e9 100644 --- a/xen/arch/x86/vmx.c +++ b/xen/arch/x86/vmx.c @@ -1176,7 +1176,6 @@ asmlinkage void vmx_vmexit_handler(struct cpu_user_regs regs) } case EXIT_REASON_EXTERNAL_INTERRUPT: { - extern int vector_irq[]; extern asmlinkage void do_IRQ(struct cpu_user_regs *); extern void smp_apic_timer_interrupt(struct cpu_user_regs *); extern void timer_interrupt(int, void *, struct cpu_user_regs *); diff --git a/xen/include/asm-x86/irq.h b/xen/include/asm-x86/irq.h index 1a38b524a6..6036e849c5 100644 --- a/xen/include/asm-x86/irq.h +++ b/xen/include/asm-x86/irq.h @@ -12,6 +12,7 @@ extern void disable_irq(unsigned int); extern void disable_irq_nosync(unsigned int); extern void enable_irq(unsigned int); +extern int vector_irq[NR_VECTORS]; extern u8 irq_vector[NR_IRQ_VECTORS]; #define IO_APIC_VECTOR(irq) irq_vector[irq] #define AUTO_ASSIGN -1 -- 2.30.2